#include "Hash.h"
#include <string.h>
#include <cstdlib>
#define HASHMAX 257
#define alpha 2

Hash::Hash()
{
	//Inicializando tabela Hash
	tamanho = HASHMAX;
	tabelaHash = new NoHash * [tamanho];
	for( int i = 0; i < tamanho; i++ )
	{
		this->tabelaHash[i] = NULL;
	}
}

void Hash::AddHash( Identificador *variavel )
{
	int indice = valorHash( variavel->getVar() );
	if(tabelaHash[indice] == NULL)
	{
		NoHash *_temp = new NoHash();
		_temp->AddNo(variavel);
		tabelaHash[indice] = _temp;
	}	
	else
	{
		NoHash *_temp = new NoHash();
		_temp->AddNo(variavel);
	}
	
}

int Hash::valorHash(string entrada)
{
	/*Valor de saida da funcao hash*/
	unsigned int h = 0;
	
	for ( int i = 0 ; i < entrada.length() ; i++ )
    {
			h = alpha * h + ( int ) entrada[i];	
	}
	
	return h % tamanho;
}

